package org.xiyinjihe.platform.service.base;

import com.github.pagehelper.Page;

import java.util.List;

/**
 * Created by AnthonyPark on 2019/3/6.
 */
public interface BaseService<T> {

    int insert(T entity);

    /**
     * 添加非空值，null不会被保存，使用数据库默认值
     *
     * @param entity
     * @return
     */
    int insertSelective(T entity);

    int updateByPrimaryKey(T entity);

    int updateByPrimaryKeySelective(T entity);

    int updateByExampleSelective(T entity, T where);

    int deleteByPrimaryKey(Object primaryKey);

    int deleteByPrimaryKeys(List<Object> primarykeys);

    /**
     * 根据指定字段值删除，判断条件为等号
     *
     * @param field
     * @param value
     * @return
     */
    int deleteByField(String field, String value);

    int deleteByFields(String[] fields, String[] values);

    /**
     * 根据实体中的属性进行查询，只能有一个返回值，有多个结果是抛出异常，查询条件使用等号
     *
     * @param entity
     * @return
     */
    T selectOne(T entity);

    T selectByPrimaryKey(Object primaryKey);

    /**
     * 单表分页查询
     *
     * <pre>
     * selectPage(0,0) return all
     * </pre>
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<T> selectPage(int pageNum, int pageSize);


    List<T> selectByFields(T entity, int pageNum, int pageSize);

    /**
     * 根据指定字段值分页查询
     *
     * @param entity
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<T> selectByEqFields(T entity, int pageNum, int pageSize);

    /**
     * 根据指定字段值分页查询,可排序
     *
     * @param entity
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<T> selectByEqFieldsOrderBy(T entity, int pageNum, int pageSize, String orderBy);

    /**
     * 根据指定字段值统计总数
     *
     * @param entity
     * @return
     */
    int selectCountByFields(T entity);

    /**
     * 获取分页信息
     * @return
     */
    Page getPageInfo();
}
